package org.example.device.control;

import java.util.List;
import java.util.Map;

/**
 * 设备控制接口
 * 定义所有设备控制器的统一接口
 */
public interface DeviceControlInterface {
    
    /**
     * 设备控制命令执行
     * @param command 控制命令
     * @return 控制结果
     */
    DeviceControlResult executeCommand(DeviceControlCommand command);
    
    /**
     * 获取设备状态
     * @param deviceId 设备ID
     * @return 设备状态信息
     */
    Map<String, Object> getDeviceStatus(Long deviceId);
    
    /**
     * 检查设备是否在线
     * @param deviceId 设备ID
     * @return 是否在线
     */
    boolean isDeviceOnline(Long deviceId);
    
    /**
     * 获取设备支持的指令类型
     * @param deviceId 设备ID
     * @return 支持的指令类型列表
     */
    List<String> getSupportedCommands(Long deviceId);
    
    /**
     * 获取设备属性
     * @param deviceId 设备ID
     * @return 设备属性
     */
    Map<String, Object> getDeviceProperties(Long deviceId);
    
    /**
     * 设置设备属性
     * @param deviceId 设备ID
     * @param properties 属性键值对
     * @return 设置结果
     */
    DeviceControlResult setDeviceProperties(Long deviceId, Map<String, Object> properties);
    
    /**
     * 设备连接测试
     * @param deviceId 设备ID
     * @return 连接测试结果
     */
    DeviceControlResult testConnection(Long deviceId);
    
    /**
     * 获取设备类型
     * @return 设备类型标识
     */
    String getDeviceType();
    
    /**
     * 获取协议类型
     * @return 协议类型（MQTT, HTTP, WebSocket等）
     */
    String getProtocolType();
}
